package com.didispace;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;

// 消息转换  p362
@EnableBinding(value = {Sink.class})
public class SinkReceiver2 {

    private static Logger logger = LoggerFactory.getLogger(HelloApplication.class);

    /**原生实现需要实现转换**/
   // @ServiceActivator(inputChannel=Sink.INPUT)
   // public void receive(User user) {
   //     logger.info("Received: " + user);
   // }

   // 由于 @ServiceActivator 本身不具备对消息的转换能力， 所以当代表 User 对象的 JSON 字符串到达后，它自身无法将其转换成 User 对象。
   // 所以，这里需要通过 @Transformer 注解帮助将字符串类型的消息转换成 User 对象，
   // 并将转换结果传递给 @ServiceActivator 的处理方法做后续的消费。  p363
   // @Transformer(inputChannel = Sink.INPUT, outputChannel = Sink.INPUT)
   // public User transform(String message) throws Exception {
   //     ObjectMapper objectMapper = new ObjectMapper();
   //     User user = objectMapper.readValue(message, User.class);
   //     return user;
   // }

    // 如果我们使用 @StreamListener 注解的话，就可以把上面的实现简化为下面的代码。  p363
    @StreamListener(Sink.INPUT)
    public void receive(User user) {
        logger.info("Received: " + user);
    }
}
